var citygroup='city';
var brandgroup='brand';
var dealergroup='dealer';

function allClicked(box)
{
  box.checked ? allChecked(box) : allUnchecked(box);
}

function allChecked(box)
{
  disableFlushBoxes(box.form, citygroup);
  disableFlushBoxes(box.form, dealergroup);
  disableFlushBoxes(box.form, brandgroup);
  box.checked=true;
  box.disabled=false;

  return;
  flushBoxes(box.form, citygroup);
  box.checked=true;
  flushBoxes(box.form, citygroup);
  flushBoxes(box.form, citygroup);
  flushBoxes(box.form, citygroup);
  disableBoxes(box.form, citygroup);
  box.enabled=true;
  disableBoxes(box.form, citygroup);
  disableBoxes(box.form, citygroup);
  disableBoxes(box.form, citygroup);

}

function disableFlushBoxes(form, group)
{
  for(var i=0; i<form.elements.length; i++)
  {
    elementBelongsToGroup(form.elements[i], group) ? disableAndFlush(form.elements[i]) : null;
  }
}

function enableBoxes(formname, groupname, enable)
{
  for(var i=0; i<document.forms[formname].elements.length; i++)
  {
    elementBelongsToGroup(document.forms[formname].elements[i], groupname) ? document.forms[formname].elements[i].disabled=!enable : null;
  }
}

function allUnchecked(box)
{
  enableBoxes(box.form.name, citygroup, true);
}

function cityClicked(box)
{
  box.checked ? cityChecked(box) : cityUnchecked(box);
}

function cityChecked(boxcity)
{
  enableCityBrands(getCity(boxcity.name).id, boxcity);
}

function cityUnchecked(boxcity)
{
  enableBoxes(boxcity.form.name, brandgroup, false);

  for(var i=0; i<boxcity.form.elements.length; i++)
  {
    elementBelongsToGroup(boxcity.form.elements[i], citygroup) && boxcity.form.elements[i].checked ? cityChecked(boxcity.form.elements[i]) : null;
  }
}

function brandClicked(brandbox)
{
  brandbox.checked ? brandChecked(brandbox) : brandUnchecked(brandbox);
}

function brandChecked(brandbox)
{
  enableBrandDealers(getBrand(brandbox.name).id, brandbox);
}

function brandUnchecked(brandbox)
{
  enableBoxes(brandbox.form.name, dealergroup);

  for(var i=0; i<brandbox.form.elements.length; i++)
  {
    elementBelongsToGroup(brandbox.form.elements[i], brandgroup) && brandbox.form.elements[i].checked ? brandChecked(brandbox.form.elements[i]) : null;
  }
}

function dealerClicked(dealerbox)
{
  // nothing
}

function getCity(controlname)
{
  for(var i in cities)
  {
    if(cities[i].name==controlname)
    {
      return cities[i];
    }
  }
  return null;
}

function getBrand(controlname)
{
  for(var i in brands)
  {
    if(brands[i].name==controlname)
    {
      return brands[i];
    }
  }
  return null;
}

function enableCityBrands(cityID, control)
{
  for(var i in cityBrands[cityID])
  {
    control.form.elements[brandgroup+'['+cityBrands[cityID][i]+']'].disabled=false;
  }
}
function enableBrandDealers(brandid, control)
{
  for(var i in brandDealers[brandid])
  {
    if(control.form.elements[citygroup+'['+dealers[brandDealers[brandid][i]].cityid+']'].checked)
    {
      control.form.elements[dealergroup+'['+brandDealers[brandid][i]+']'].disabled=false;
    }
  }
}

function elementBelongsToGroup(element, groupname)
{
  return element.name.indexOf(groupname)>=0;
}
function disableAndFlush(element)
{
  element.disabled=true;
  element.checked=false;
}

function City(id, name)
{
  this.id=id;
  this.name=name;
}

function Brand(id, name)
{
  this.id=id;
  this.name=name;
}

function Dealer(id, name, cityid)
{
  this.id=id;
  this.name=name;
  this.cityid=cityid;
}