/*
============================= 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) {

}


/* -- I'm sorry ...
 */
function upd_make_dropdown(data,id,lng) {
  /* Updates a drop down (<select>), given its name and a data set.
   * The expected format is a list of [id, make], as obtained via the
   * AJAX call ajax_get_makes
   */
  var selectobject=document.getElementById(id);
  selectobject.disabled = true;
  selectobject.options.length = 0;
  selectobject.options[0] = lng == 'en' ? new Option('Make?','') :new Option('Marque?','');
  for (var i=0; i<data.length; i++) {
    selectobject.options[selectobject.options.length] = new Option(data[i][1],data[i][1]);//'<option value="' + data[i][1] + '">' + data[i][1] + '</option>';
  }
  selectobject.selectedIndex = 0;
  selectobject.disabled = false;
}

/*
 * Maintains the state of the car compare selector.
 * True means new cars (i.e. active), false, all of them
 */
var default_state = true;

function set_carcompare_state(id1,id2,id3,lng) {
  _makes = [];
  var cb = document.getElementById(id1);
  if(cb) {
    dd_yr = document.getElementById(id2);
    if(dd_yr) {
      dd_mdl = document.getElementById(id3);
      if(dd_mdl) {        
        dd_mdl.selectedIndex = 0;
        if(cb.checked) {
          /* new cars mode */
          default_state  = true;
          AUTO123.NewCars.getMakes(true,function(data,o){upd_make_dropdown(data,"make",lng);});
        } else {
          /* used cars mode */
          default_state  = false;    
          AUTO123.NewCars.getMakes(false,function(data,o){upd_make_dropdown(data,"make",lng);});
        }
      }
    }
  }
}

/* Exclusively made for cc
 */
function route_call(id1,makeObj, modelObj, make_startIdx, model_startIdx, language, modelDefault, model_value_is_model, retrieve_style) {
  var cb = document.getElementById(id1);
  if(cb.checked){
    ajax_updateModelsWithYearsAsLink(makeObj, modelObj, make_startIdx, model_startIdx, language, modelDefault);
  }else{
    ajax_updateModels(makeObj, modelObj, make_startIdx, model_startIdx, modelDefault, model_value_is_model, retrieve_style);    
  }
}

function carcompare_start(f,lng) {
  if(f.make.selectedIndex > 0 && f.comparelink.selectedIndex > 0 && f.year.selectedIndex > 0) {
    appendToAction(f, f.make, f.comparelink, f.year, lng=='en'?"compare":"comparer");
    f.submit();
  } else {
    if(lng=='en') {
      alert("You must select a make, a model and a year !");    
    }
    else {
      alert("Vous devez sélectionner une année, une marque et un modèle afin d'accéder à la page de ce modèle!");      
    }
  }  
  return false;
}



function route_call2(id1,frm,lng) {
  var cb = document.getElementById(id1);
  if(cb.checked){
   return newcars_compare_validate(frm);
  }else{
   return carcompare_start(frm,lng);    
  }
}


