oVL = {

    DEBUG: false,
    
    // Brand, Year, Vehicle, and Model Index Holders
    OBI: -1,
    OYI: -1,
    OVI: -1,
    OMI: -1,
    
    SELECTBRAND: "mybrand",
    SELECTYEAR: "myyear",
    SELECTVEHICLE: "myvehicle",
    SELECTMODEL: "mymodel",
    SAVEVEHICLE: "savevehiclebtn",

    SELECT_VEHICLES_FORM: "o-my-vehicle-form",

    /**
        Initialize the flyouts system.
    */
    init: function() {
        // Debounce this init call.
        if (arguments.callee.done) return;
        arguments.callee.done = true;
    },


    getBrandOptList: function(selectObj) {
      var list = $(selectObj);
      var newopt = null;
      
      if ( oVLD.length > 0 ) {
        for( var i=0; i < oVLD.length; i++ ) {
          newopt = document.createElement("option");
          newopt.setAttribute("value", i);
          newopt.text = oVLD[i].brand;
          try {
            list.add(newopt, null); // standards compliant; doesn't work in IE
          }
          catch(ex) {
            list.add(newopt); // IE only
          }
        } 
      }
      this.hideOptList(this.SELECTYEAR);
      this.hideOptList(this.SELECTVEHICLE);
      this.hideOptList(this.SAVEVEHICLE);
    },

    setBrandIndex: function(brandId) {
      if (oVLD) {
        for (i=0; i < oVLD.length; i++) {
          if ( oVLD[i].brand_id == brandId ) {
            this.OBI = i;
            return true;
          } 
        }
      }
      return false;
    },

    getYearOptList: function(selectObj, brandIndx) {
      var list = $(selectObj);
      var newopt = null;
      
      this.OBI = brandIndx;
      this.clearOptList(selectObj);
      this.clearOptList(this.SELECTVEHICLE);
      
      if ( oVLD.length > 0 ) {
        for( var i=0; i < oVLD[brandIndx].years.length; i++ ) {
          newopt = document.createElement("option");
          newopt.setAttribute("value", i);
          newopt.text = oVLD[brandIndx].years[i].year;
          try {
            list.add(newopt, null); // standards compliant; doesn't work in IE
          }
          catch(ex) {
            list.add(newopt); // IE only
          }
        } 
      }

      this.showOptList(selectObj);
      this.hideOptList(this.SELECTVEHICLE);
      this.hideOptList(this.SAVEVEHICLE);

    },

    getYearOptListSubset: function(selectObj, brandIndx, evalstmt, year) {
      var list = $(selectObj);
      var opt = 1;
      
      this.OBI = brandIndx;
      this.clearOptList(selectObj);
      this.clearOptList(this.SELECTVEHICLE);
      
      if ( oVLD.length > 0 ) {
        for( var i=0; i < oVLD[brandIndx].years.length; i++ ) {
          if (!evalstmt || eval(evalstmt)) {
            list.options[opt] = new Option(oVLD[brandIndx].years[i].year, i);
            if ( oVLD[brandIndx].years[i].year == year ) {
              list.options[opt].selected = true;
            }
            opt++;
          }
        } 
      }

      this.showOptList(selectObj);
      this.hideOptList(this.SELECTVEHICLE);

    },
		
		getVehicleOptListSubsets: function(selectObj, yearIndx, subset1, subset2, subset3, subset4, nameplate) {
      var vehList = $(selectObj);
      var vehicles = yearIndx?oVLD[this.OBI].years[yearIndx].vehicles:null;
      var opt = 1;
      
      this.OYI = yearIndx;
      
      this.clearOptList(selectObj);
      
      if ( vehicles && vehicles.length > 0 ) {
        for( var i=0; i < vehicles.length; i++ ) {
          if (!subset1 || eval("vehicles[i]."+subset1+"!=''") || !subset2 || eval("vehicles[i]."+subset2+"!=''") || !subset3 || eval("vehicles[i]."+subset3+"!=''") || !subset4 || eval("vehicles[i]."+subset4+"!=''")) {
            vehList.options[opt] = new Option(vehicles[i].nameplate, i);
            if ( nameplate && vehicles[i].nameplate == nameplate ) {
              vehList.options[opt].selected = true;
            }
            opt++;
          }
        }
      }

      yearIndx?this.showOptList(selectObj):this.hideOptList(selectObj);
      
    },
		
    setYearIndex: function(year) {
      if (oVLD) {
        for (i=0; i < oVLD[this.OBI].years.length; i++) {
          if ( oVLD[this.OBI].years[i].year == year ) {
            this.OYI = i;
          } 
        }
      }
    },

    getVehicleOptList: function(selectObj, yearIndx) {
      var list = $(selectObj);
      var vehicles = yearIndx?oVLD[this.OBI].years[yearIndx].vehicles:null;
      var newopt = null;
      
      this.OYI = yearIndx;
      
      this.clearOptList(selectObj);
      
      if ( vehicles && vehicles.length > 0 ) {
        for( var i=0; i < vehicles.length; i++ ) {
          newopt = document.createElement("option");
          newopt.setAttribute("value", i);
          newopt.text = vehicles[i].nameplate;
          try {
            list.add(newopt, null); // standards compliant; doesn't work in IE
          }
          catch(ex) {
            list.add(newopt); // IE only
          }
        } 
      }

      yearIndx?this.showOptList(selectObj):this.hideOptList(selectObj);
      this.hideOptList(this.SAVEVEHICLE);

    },

    getVehicleOptListSubset: function(selectObj, yearIndx, subset, nameplate) {
      // alert("getVehicleOptListSubset\nnameplate: " + nameplate);
      var vehList = $(selectObj);
      var vehicles = yearIndx?oVLD[this.OBI].years[yearIndx].vehicles:null;
      var opt = 1;
      
      this.OYI = yearIndx;
      
      this.clearOptList(selectObj);
      
      if ( vehicles && vehicles.length > 0 ) {
        for( var i=0; i < vehicles.length; i++ ) {
          if (!subset || eval("vehicles[i]."+subset+"!=''") ) {
            vehList.options[opt] = new Option(vehicles[i].nameplate, i);
            if ( nameplate && vehicles[i].nameplate == nameplate ) {
              vehList.options[opt].selected = true;
            }
            opt++;
          }
        }
      }

      yearIndx?this.showOptList(selectObj):this.hideOptList(selectObj);
      if (subset == 'manual' || subset == 'schedule') {
        $('o-download-button').setStyle('display','none');
      }

    },

    getModelOptList: function(selectObj, vehIndx) {
      var list = $(selectObj);
      var models = vehIndx?oVLD[this.OBI].years[this.OYI].vehicles[vehIndx].models:null;
      var newopt = null;
      
      this.OVI = vehIndx;
      
      // alert( "vehIndx: " + vehIndx + "\nmodels.length: " + models.length + "\nmodels[0]: " + models[0]);
      
      this.clearOptList(selectObj);
      
      if ( models && models.length > 0 ) {
        for( var i=0; i < models.length; i++ ) {
          newopt = document.createElement("option");
          newopt.setAttribute("value", models[i]);
          newopt.text = models[i];
          try {
            list.add(newopt, null); // standards compliant; doesn't work in IE
          }
          catch(ex) {
            list.add(newopt); // IE only
          }
        } 
      }
    },

    clearOptList: function(selectObj, startPoint) {
      var list = $(selectObj);
      var i = (startPoint==null)?1:startPoint;

      while ( i < list.length ) {
          list.options[i]= null;
      }
    },

    
    hideOptList: function(selectObj) {
      $(selectObj).getParent().style.display = "none";
    },

    showOptList: function(selectObj) {
      $(selectObj).getParent().style.display = "block";
    },

    getaVehicleValue: function(indx, element) {
      var rtn = "";
      if (this.OBI != -1 && this.OYI != -1) {
        rtn = eval ("oVLD[this.OBI].years[this.OYI].vehicles["+indx+"]."+element);
      }
      return rtn;
    },

    resetForm: function() {

      this.clearOptList(this.SELECTBRAND);
      this.getBrandOptList(this.SELECTBRAND);
      $(this.SELECT_VEHICLES_FORM).setStyle('display', 'block');
      $(this.SELECTYEAR).selectedIndex = 0;
      this.showOptList(this.SELECTYEAR);

    },

    closer: function() {
    }

}
