
function SearchBox(isnew, isvan, maxoptions) {
   var me = this;
   this.isnew=isnew;
   this.isvan=isvan;
   this._maxoptions=maxoptions;
   this.frmSB=obj('frmSB');

   this.swapNU = function (isnew) {
      this.isnew = isnew;

      this.loadSB();
   }

   this.swapCV = function (isvan) {
      this.isvan = isvan;
      obj('tab0').className = (!this.isvan ? 'sel' : '');
      obj('tab1').className = (this.isvan ? 'sel' : '');

      this.loadSB();
   }

   this.configureBox = function () {
      if (this.isvan) {
         if (this.isnew) {
            close('pricerangeSB');
            close('advsrchbtn');
            close('advanced');
            open('bodyfuelSB');
            open('vanbodySB');
            close('carbodySB');
            close('frmRegSB');
            
         }
         else {
            open('pricerangeSB');
            open('advsrchbtn');
            open('frmRegSB');
         }
      }
      else {
         if (this.isnew) {
            close('pricerangeSB');
            close('advsrchbtn');
            close('advanced');
            open('bodyfuelSB');
            close('vanbodySB');
            open('carbodySB');
            close('frmRegSB');
         }
         else {
            close('bodyfuelSB');
            open('pricerangeSB');
            open('advsrchbtn');
            open('frmRegSB');
         }
      }
   }

   this.onMarketSB = function (currMake) {
      this.onSelMarket(this.isnew, this.isvan, this.frmSB.makeSB, this.frmSB.modelSB, currMake);
   }

   this.onMakeSB = function (currModel) {
      this.onSelMake(this.isnew, this.isvan, this.frmSB.makeSB, this.frmSB.modelSB, currModel);
   }

   this.onSelMarket = function (isnew, isvan, oMake, oModel, sMake) {
      clearList(oModel);
      clearList(oMake);

      var iMakeIDX = 0;
      sMake = (sMake == undefined ? "" : sMake.toLowerCase() + (isvan && sMake.indexOf('vans') == -1 ? ' vans' : ''));
      var fetch = new Fetcher(true);
      var sResp = fetch.now('feeds/do-makes.aspx?isnew=' + isnew + '&isvan=' + isvan);

      if (sResp != '') {
         var asMakes = extractXML(sResp, "makes").split("\|");
         var asMake = null;

         oMake.options[0] = new Option('Choose Make', '');
         for (var i = 0; i < asMakes.length - 1; i++) {
            var value = (asMakes[i] + (isvan ? ' vans' : '')).toLowerCase();
            oMake.options[i + 1] = new Option(asMakes[i], value);
            if (sMake == value) iMakeIDX = (i + 1);
         }
      }
      oMake.selectedIndex = iMakeIDX;
   }
   this.onSelMake = function (isnew, isvan, oMake, oModel, sModel) {
      if (oMake != undefined && oModel != undefined) {
         clearList(oModel);
         oModel.options[0] = new Option('Choose Model', '');

         var iModelIDX = 0;
         sModel = (sModel == undefined ? "" : sModel.toLowerCase());
         if (oMake.selectedIndex > 0) {
            var fetch = new Fetcher(true);
            var sResp = fetch.now('feeds/do-models.aspx?isnew=' + isnew + '&isvan=' + isvan + '&make=' + oMake[oMake.selectedIndex].text);
            if (sResp != '') {
               var asModels = extractXML(sResp, "models").split("\|");
               var asModel = null;
               if (isnew) {
                  for (var i = 0; i < asModels.length - 1; i++) {
                     oModel.options[i + 1] = new Option(asModels[i]);
                     if (sModel == asModels[i].toLowerCase()) iModelIDX = (i + 1);
                  }
               }
               else {
                  for (var i = 0; i < asModels.length - 1; i++) {
                     var as = asModels[i].split('~'); 
                     if (isvan)
                        oModel.options[i + 1] = new Option(as[0] + ' (' + as[1] + (as[1]==1 ? ' van' : ' vans') + ')', as[0]);
                     else
                        oModel.options[i + 1] = new Option(as[0] + ' (' + as[1] + (as[1]==1 ? ' car' : ' cars') + ')', as[0]);
                     if (sModel == as[0].toLowerCase()) iModelIDX = (i + 1);
                  }
               }
            }
            oModel.disabled = false;
         }
         else {
            oModel.disabled = true;
         }

         oModel.selectedIndex = iModelIDX;
      }
   }


   this.setAction = function () {
      if (this.isvan) {
         this.frmSB.action = (this.isnew ? 'vans/' : 'vans/used/');
         this.frmSB.lnk.value = (this.isnew ? '912' : '921');
      }
      else {
         this.frmSB.action = (this.isnew ? 'new-cars/' : 'used-cars/');
         this.frmSB.lnk.value = (this.isnew ? '201' : '110');
      }
   }

   this.loadSB = function (make, model) {
      if (make == null) make = '';
      if (model == null) model = '';
      this.setAction();
      this.configureBox();
      this.onMarketSB(make);
      this.onMakeSB(model);
   }

   this.validateSB = function () {
       var bOk = true;
       if (this.isnew) {
           bOk = false;
           if (this.frmSB.modelSB.selectedIndex == 0)
               alert('Please choose a "Model"');
           else
               bOk = true;
       }

       if (bOk) {
           if (this.frmSB.postcodeSB.value.trim() == 'Enter Your Postcode') this.frmSB.postcodeSB.value = '';
           if (this.frmSB.postcodeSB.value.length != 0) {
               if (!validPostcode(this.frmSB.postcodeSB.value.trim())) {
                   alert('Your postcode is not recognised, ensure you have included a space within it.');
                   bOk = false;
               }
           }
           if (obj('advanced') != null && isopen('advanced')) {
               var frmAdv = obj('frmAdvanced');
               addHidden(this.frmSB, 'fuel', selectedValue(frmAdv.fuelAdv));
               addHidden(this.frmSB, 'trans', selectedValue(frmAdv.trans));
               addHidden(this.frmSB, 'age', selectedValue(frmAdv.age));
               addHidden(this.frmSB, 'mileage', selectedValue(frmAdv.mileage));
               addHidden(this.frmSB, 'body', selectedValue(frmAdv.bodyAdv));
               for (var i = 0; i < this._maxoptions; i++)
                   addHidden(this.frmSB, 'cb_' + i, (frmAdv['cb_' + i].checked ? 'Y' : ''));
           }
            else if (this.isvan) {
               if (this.frmSB.fuelCar != null) addHidden(this.frmSB, 'fuel', selectedValue(this.frmSB.fuelCar));
               if (this.frmSB.bodyVan != null) addHidden(this.frmSB, 'body', selectedValue(this.frmSB.bodyVan));
           }
           else {
               if (this.frmSB.fuelCar != null) addHidden(this.frmSB, 'fuel', selectedValue(this.frmSB.fuelCar));
               if (this.frmSB.bodyCar != null) addHidden(this.frmSB, 'body', selectedValue(this.frmSB.bodyCar));
           }
       }
       return bOk;
   }

   this.showAdvanced = function () {
      openclose('advanced');
   }
   this.goAdvanced = function () {
      this.validateSB();
      this.frmSB.submit();
   }
}

function checkRegSB(frm) {
   if (frm.regnoSB.value == 'Registration Lookup')
      return false;

   var bOk = false;
   frm.regnoSB.value = frm.regnoSB.value.trim().replace(' ', '');
   if (!validAlphanumeric(frm.regnoSB.value))
      alert('Please enter a valid registration.');
   else
      bOk = true;

   return bOk;
}
