function FeatureInfo(strName, strDescription, strImage)
{
  this.name = strName;
  this.description = strDescription;
  this.image = strImage;
}

/**
 * Swap the current exterior vehicle image for the specified trim
 */
function qqModelImageChangeTrim(strName)
{
  var imgURL = null;
  if (curSetDefiners['extcolor'] != null) 
  {
    imgURL = arrModelImages[strName + "-" + curSetDefiners['extcolor']];
  }
  if (imgURL == null) 
  {
    // Try (again, possibly) for just the trim
    imgURL = arrModelImages[strName];
  }

  if (imgURL != null) 
  {
    var image = document.getElementById('qqVehicleImage');
    image.src = imgURL;
  }
}

function qqModelImageChangeExtColor(strName)
{
  var imgURL = null;
  if (curSetDefiners['trim'] != null) 
  {
    imgURL = arrModelImages[curSetDefiners['trim'] + "-" + strName];
  }
  if (imgURL == null) 
  {
    // Try (again, possibly) for just the trim
    imgURL = arrModelImages[strName];
  }

  if (imgURL != null) 
  {
    var image = document.getElementById('qqVehicleImage');
    image.src = imgURL;
  }
}

/**
 * Reset the model image to the currently selected one, if exists
 */
function qqModelImageReset()
{
  var imgURL = null;
  if (curSetDefiners['trim'] != null && curSetDefiners['extcolor'] != null) 
  {
    imgURL = arrModelImages[curSetDefiners['trim'] + "-" + curSetDefiners['extcolor']];
  }
  else if (curSetDefiners['trim'] != null) 
  {
    imgURL = arrModelImages[curSetDefiners['trim']];
  }
  else if (curSetDefiners['extcolor'] != null) 
  {
    imgURL = arrModelImages[curSetDefiners['extcolor']];
  }

  if (imgURL != null)
  {
    var image = document.getElementById('qqVehicleImage');
    image.src = imgURL;
  }
}

/**
 * Set the current part for a definer class, when a user clicks on it.
 */
function qqSetDefiner(strDefiner, strName)
{
  // Check if it's an "uncheck"
  if (curSetDefiners[strDefiner] == strName)
  {
    curSetDefiners[strDefiner] = null;
    qqModelImageReset();
  }
  else
  {
    curSetDefiners[strDefiner] = strName;
  }
}

/**
 * Swap the color swatch tick/not-ticked image.
 */
function qqSwapColorImage(strImageId)
{
  var objImage = document.getElementById(strImageId);
  // Check if turning it on or off
  objImage.src = vfsBase + (objImage.src.indexOf("ticked") > -1) ? "/apps/img/color-swatch-bg.gif" :"/apps/img/color-swatch-ticked-bg.gif";
}

/**
 * Show the larger option popup and add the necessary data.
 */
function qqShowOption(intIndex)
{
  var optionDiv = document.getElementById("qqOptionLarge");
  var name = document.getElementById("qqOptionLargeName");
  var desc = document.getElementById("qqOptionLargeDesc");
  var image = document.getElementById("qqOptionLargeImage");
  name.innerHTML = arrOptions[intIndex].name;
  desc.innerHTML = arrOptions[intIndex].description;
  image.src = vfsBase + "/apps/vimg/features/207x100/" + arrOptions[intIndex].image;
  optionDiv.style.visibility = "visible";
  showIFrameMask("belowOptionLarge", "qqOptionLarge");
}

/**
 * Hide the larger option popup
 */
function qqHideOption()
{
  var optionDiv = document.getElementById("qqOptionLarge");
  optionDiv.style.visibility = "hidden";
  hideIFrameMask("belowOptionLarge");
}

function qqPrefImageChange(intIndex, strImage)
{
  var objImage = document.getElementById("qqPrefGroupImg" + intIndex);
  objImage.src = vfsBase + "/apps/vimg/features/94x45/" + strImage;
}

function qqFormSubmit(strFormName)
{
  if (!validateOtherFields(document.forms[strFormName], "qqErrorDiv"))
  {
    return;
  }
  // Build the service comments
  var selectedModelString = qqGetSelectedPartsDivide(selectedModel);
  var selectedExteriorString = qqGetSelectedPartsDivide(selectedExteriorColor);
  var selectedInteriorString = qqGetSelectedPartsDivide(selectedInteriorColor);
  var selectedOptionsString = qqGetSelectedPartsDivide(selectedOption);

  document.forms[strFormName].elements['systemComments'].value = "Customer is interested in Trims [" + selectedModelString + "] Exteriors [" + selectedExteriorString + "] Interiors [" + selectedInteriorString + "] Features [" + selectedOptionsString + "]";
  document.forms[strFormName].elements['selectedTrims'].value = selectedModelString;
  document.forms[strFormName].elements['selectedExterior'].value = selectedExteriorString;
  document.forms[strFormName].elements['selectedInterior'].value = selectedInteriorString;
  document.forms[strFormName].elements['selectedOptions'].value = selectedOptionsString;
  document.forms[strFormName].submit();
}

function qqClickPart(selectedItems, strName)
{
    selectedItems[strName] = (selectedItems[strName] == strName) ? null : strName;
}

function qqGetSelectedPartsDivide(elementList)
{
  var partList = new Array();
  if (elementList != null)
  {
    for (var part in elementList)
    {
      var partValue =  elementList[part];
      if (partValue != null && partValue != "")
      {
        partList.push(partValue);
      }
    }
    return partList.join(", ");
  }
  return "";
}

function changeModelId(id)
{
  window.location.href = (quoteType == 'quickquote') ? "quickquote?requestType=quote&modelId=" + id : "quickquote?requestType=testDrive&modelId=" + id;
}

function clearPageCheckBoxes()
{
  var node =  document.getElementById('body_left');
  var inputs = node.getElementsByTagName('input');
  for (var i =0; i < inputs.length; i++)
  {
    if (inputs[i].type=='checkbox')
    {
      inputs[i].checked = false;
    }
  }
}

function changeText(textBlockId, text)
{
  var textBlock = document.getElementById(textBlockId);
  textBlock.innerHTML = text;
}