/*
============================= Notes ================================
Author(s):
  Francis Caporuscio

Dependencies:
  YAHOO
  YAHOO.util.Dom
  YAHOO.util.Connect
====================================================================
*/

cache_ajax_updateModels = {};

function ajax_updateModels(makeObj, modelObj, make_startIdx, model_startIdx, model_default, model_value_is_model, retrieve_style) {
  if(make_startIdx == null) make_startIdx = 0;
  if(model_startIdx == null) model_startIdx = 0;
  if(model_value_is_model == null) model_value_is_model = false;
  if(typeof(js_auto123_language) == null) js_auto123_language = 'en';
  var language = js_auto123_language;
  
  var url = "/site/support/get_models," + new Date().getTime().toString() + ".spy?language=" + escape(language);
  
  if(retrieve_style != null)
    url += "&style=" + encodeURIComponent(retrieve_style);
  
  if(makeObj.selectedIndex >= make_startIdx) {
    var make = makeObj.options[makeObj.selectedIndex].value;
    url += "&make=" + encodeURIComponent(make);
    
    var cb = {
      success: cbSuccess_ajax_updateModels,      
      failure: cbFailure_ajax_updateModels,      
      argument: [modelObj, model_startIdx, model_default, model_value_is_model]
    };
    
    var c = YAHOO.util.Connect.asyncRequest("GET", url, cb, null);
  }
}

function cbSuccess_ajax_updateModels(o) {
  eval("var models = (" + o.responseText + ")");
  var modelObj = o.argument[0];
  var model_startIdx = o.argument[1];
  var model_default = o.argument[2];
  var model_value_is_model = o.argument[3];
  
  while(modelObj.options.length > model_startIdx) modelObj.options[model_startIdx] = null;
  for(var i = 0; i < models.length; i++) {
    modelObj.options[modelObj.options.length] = new Option(models[i][0], model_value_is_model ? models[i][0] : models[i][1]);
    if(model_default != null && model_default == models[i][1]) {
      modelObj.selectedIndex = i;
    }
  }
}

function cbFailure_ajax_updateModels(o) {

}

function ajax_updateYears(makeObj, modelObj, yearObj, make_startIdx, model_startIdx, year_startIdx, autoSelect) {
  var url = "/site/support/get_years.spy?t=" + new Date().getTime().toString();
  
  if(make_startIdx == null) make_startIdx = 0;
  if(model_startIdx == null) model_startIdx = 0;
  if(year_startIdx == null) year_startIdx = 0;
  if(autoSelect == null) autoSelect = true;
  
  if(makeObj.selectedIndex >= make_startIdx && modelObj.selectedIndex >= model_startIdx) {
    var make = makeObj.options[makeObj.selectedIndex].value;
    var model = modelObj.options[modelObj.selectedIndex].value;
    url += "&make=" + encodeURIComponent(make) + "&model=" + encodeURIComponent(model);
    
    var cb = {
      success: cbSuccess_ajax_updateYears,      
      failure: cbFailure_ajax_updateYears,
      argument: [yearObj, year_startIdx, autoSelect]
    };
    
    var c = YAHOO.util.Connect.asyncRequest("GET", url, cb, null);
  }
}

function cbSuccess_ajax_updateYears(o) {
  eval("var years = (" + o.responseText + ")");
  var yearObj = o.argument[0];
  var year_startIdx = o.argument[1];
  var autoSelect = o.argument[2];
  
  while(yearObj.options.length > year_startIdx) yearObj.options[year_startIdx] = null;
  for(var i = 0; i < years.length; i++) {
    yearObj.options[yearObj.options.length] = new Option(years[i][0], years[i][0]);
    if(autoSelect && (years[i][1] == 1 || years.length == 1)) {
      yearObj.selectedIndex = i + year_startIdx;
    }
  }
}

function cbFailure_ajax_updateYears(o) {

}

function ajax_updateModelsWithYearsAsCarID(makeObj, modelObj, make_startIdx, model_startIdx, language, modelDefault, onComplete) {
  if(make_startIdx == null) make_startIdx = 0;
  if(model_startIdx == null) model_startIdx = 0;
  
  var url = "/site/support/get_modelswithyears.spy?t=" + new Date().getTime().toString() + "&lng=" + encodeURIComponent(language);
  
  if(makeObj.selectedIndex >= make_startIdx) {
    var make = makeObj.options[makeObj.selectedIndex].value;
    url += "&make=" + encodeURIComponent(make);
    
    var cb = {
      success: cbSuccess_ajax_updateModelsWithYearsAsCarID,
      failure: cbFailure_ajax_updateModelsWithYearsAsCarID,
      argument: [modelObj, model_startIdx, modelDefault, onComplete]
    };
    
    var c = YAHOO.util.Connect.asyncRequest("GET", url, cb, null);
  }
}

function cbSuccess_ajax_updateModelsWithYearsAsCarID(o) {
  eval("var models = (" + o.responseText + ")");
  var modelObj = o.argument[0];
  var model_startIdx = o.argument[1];
  var modelDefault = o.argument[2];
  var onComplete = o.argument[3];
  
  while(modelObj.options.length > model_startIdx) modelObj.options[model_startIdx] = null;
  for(var i = 0; i < models.length; i++) {
    var t = models[i].year + " " + models[i].model;
    var v = models[i].carid;
    var s = modelDefault == t || modelDefault == v;
    modelObj.options[modelObj.options.length] = new Option(t, v, s);
  }
  
  if(typeof(onComplete) == "function") {
    onComplete();
  }
}

function cbFailure_ajax_updateModelsWithYearsAsCarID(o) {

}

function ajax_updateTrims(makeObj, modelObj, yearObj, trimObj, make_startIdx, model_startIdx, year_startIdx, trim_startIdx, language) {
  if(make_startIdx == null) make_startIdx = 0;
  if(model_startIdx == null) model_startIdx = 0;
  if(year_startIdx == null) year_startIdx = 0;
  if(trim_startIdx == null) trim_startIdx = 0;
  
  if(makeObj.selectedIndex >= make_startIdx && modelObj.selectedIndex >= model_startIdx && yearObj.selectedIndex >= year_startIdx) {
    var url = "/site/support/get_trims.spy?t=" + new Date().getTime().toString() + "&lng=" + encodeURIComponent(language);
    url += "&make=" + encodeURIComponent(makeObj.options[makeObj.selectedIndex].value);
    url += "&model=" + encodeURIComponent(modelObj.options[modelObj.selectedIndex].value);
    url += "&year=" + encodeURIComponent(yearObj.options[yearObj.selectedIndex].value);
    
    var cb = {
      success: cbSuccess_ajax_updateTrims,
      failure: cbFailure_ajax_updateTrims,
      argument: [trimObj, trim_startIdx]
    };
    
    var c = YAHOO.util.Connect.asyncRequest("GET", url, cb, null);
  }  
}

function cbSuccess_ajax_updateTrims(o) {
  eval("var trims = (" + o.responseText + ")");
  var trimObj = o.argument[0];
  var trim_startIdx = o.argument[1];
  
  while(trimObj.options.length > trim_startIdx) trimObj.options[trim_startIdx] = null;
  for(var i = 0; i < trims.length; i++) {
    trimObj.options[trimObj.options.length] = new Option(trims[i].trim || '- base -', trims[i].carid);
  }
}

function cbFailure_ajax_updateTrims(o) {

}


function ajax_updateModelsWithYearsAsLink(makeObj, modelObj, make_startIdx, model_startIdx, language, modelDefault) {
  if(make_startIdx == null) make_startIdx = 0;
  if(model_startIdx == null) model_startIdx = 0;
  
  var url = "/site/support/get_modelswithyears.spy?t=" + new Date().getTime().toString() + "&lng=" + encodeURIComponent(language);
  
  if(makeObj.selectedIndex >= make_startIdx) {
    var make = makeObj.options[makeObj.selectedIndex].value;
    url += "&make=" + encodeURIComponent(make);
    
    var cb = {
      success: cbSuccess_ajax_updateModelsWithYearsAsLink,
      failure: cbFailure_ajax_updateModelsWithYearsAsLink,
      argument: [modelObj, model_startIdx, modelDefault]
    };
    
    var c = YAHOO.util.Connect.asyncRequest("GET", url, cb, null);
  }
}

function cbSuccess_ajax_updateModelsWithYearsAsLink(o) {
  eval("var models = (" + o.responseText + ")");
  var modelObj = o.argument[0];
  var model_startIdx = o.argument[1];
  var modelDefault = o.argument[2];
  
  while(modelObj.options.length > model_startIdx) modelObj.options[model_startIdx] = null;
  for(var i = 0; i < models.length; i++) {
    var t = models[i].year + " " + models[i].model;
    if (modelObj.name == 'builderlink')
      var v = models[i].builderlink;
    else if (modelObj.name == 'comparelink')
      var v = models[i].comparelink;      
    else
      var v = models[i].overviewlink;
    var s = modelDefault == t || modelDefault == v;
    modelObj.options[modelObj.options.length] = new Option(t, v, s);
  }
}

function cbFailure_ajax_updateModelsWithYearsAsLink(o) {

}