Event.observe(window, 'load', function(){
  if ($('slidercontainer'))
  {
    var slider = $('slider');
    var min_scale_factor = isNaN($('min_scale').value) ? 100 : $('min_scale').value*100;
    var max_scale_factor = isNaN($('max_scale').value) ? 100 : $('max_scale').value*100;

    if($('slider'))
    {
      scaleSlider = new Control.Slider(slider.down('.handle'), slider, {
        range: $R(min_scale_factor, max_scale_factor),
        sliderValue: 100,
        onSlide: function(value) {
          $('slider_value').value = Math.round(value*100)/100;
        },
        onChange: function(value) {
          $('slider_value').value = Math.round(value*100)/100;
          sendData();
        }
      });
    }
  }

  if ($('scaled_materialselector'))
  {
    Event.observe($('scaled_materialselector'), 'change', sendData);
  }

  $$('.bt_ordernow1').each(function(el){
    if (!el.hasClassName('disabled'))
    {
      Event.observe(el, 'click', ordernow);
    }
  });

});

Ajax.Responders.register({
  onCreate: function() {
      if(!($('material_selected_price_loader') != undefined && $('material_selected_price_loader').visible())) {
          $('loader').show();
      }
  },
  onComplete: function() {
    $('loader').hide();
  }
});

function EnableCostCalc(inputname, formname, replacename, url)
{
  Event.observe($(inputname), 'change', CalcCost.bindAsEventListener($(inputname), formname, replacename, url));
}

function CalcCost(e, formname, replacename, url)
{
  new Ajax.Updater(replacename, url, {
    method: 'get',
    parameters: $(formname).serialize(true),
    evalScripts: true
  });
}

var typetimer;
var sendtimer;

function resetTypeTimer()
{
  clearTimeout(typetimer);
  clearTimeout(sendtimer)
  typetimer = setTimeout(function(){
    if ($('slider_value'))
    {
      setSliderValue(scaleSlider, $('slider_value').value);
    }
  }
  , 1500);
}

function resetSendTimer()
{
  clearTimeout(sendtimer);
  sendtimer = setTimeout(function(){
    sendData();
  }
  , 1500);
}

function resetScale()
{
  scaleSlider.setValue(100);
}

function removeTimer()
{
  clearTimeout(sendtimer);
  clearTimeout(typetimer);
}

function sendData()
{
  new Ajax.Request('?uri=/udesign/model/recalculateModelProperties', {
    parameters: {
      scale: $('slider_value') ? ($('slider_value').value/100) : 1,
      model: $('selected_model_id').value,
      material: $('scaled_materialselector') ? $F('scaled_materialselector') : null
    },
    onComplete: function(ts){
      values = ts.responseText.evalJSON();
      if (values != null)
      {
        setDimensions(values.bbox);
        setMaterials(values.materials, values.selected_material);
        setModelPrice(values.price);
        setPriceProps(values.includes_tax, values.includes_shipping)
      }
      else
      {
        resetScale();
      }
      removeTimer();
    }
  });
}

function setDimensions(bbox)
{
  $$('span.scaled_x_dim').each(function (el){
    el.update(bbox.x);
  });
  $$('span.scaled_y_dim').each(function (el){
    el.update(bbox.y);
  });
  $$('span.scaled_z_dim').each(function (el){
    el.update(bbox.z);
  });
  removeTimer();
}

function setMaterials(materialsList, selectedMaterial)
{
  $('scaled_materialselector').select('option').each(function(el){
    el.remove();
  });

  $H(materialsList).each(function(material, index){
    var option = new Element('option', {'value': material[1].id}).update(material[1].title);
    if (material[1].id == selectedMaterial)
    {
      option.setAttribute('selected', 'selected');
    }
    $('scaled_materialselector').insert(option);
  });
}

function setModelPrice(price)
{
  $('slidercontainer').select('.priceamount').each(function(el){
    el.update(price);
  });

  $('slidercontainer').select('.price_euro').each(function(el){
    el.update(UDesign.Order.currencyConvert(price).toFixed(2));
  });
}

function setPriceProps(tax, shipping)
{
  var priceprops;
  if (tax == 1)
  {
    if (shipping == 1)
    {
      priceprops = 'price Inc VAT & shipping';
    }
    else
    {
      priceprops = 'price Inc VAT';
    }
  }
  else
  {
    priceprops = 'price Excl VAT';
  }
  $$('.priceprops').each(function(el){
    el.update(priceprops);
  });
}

function setSliderValue(slider, value)
{
  if (isNaN(value))
  {
    slider.setValue(100);
  }
  else
  {
    slider.setValue(value);
  }
  resetSendTimer();
  clearTimeout(typetimer);
}

function ordernow(e)
{
  e.stop();
  var url = this.href;
  if ($('slider_value'))
  {
    var scale = isNaN($('slider_value').value/100) ? 1 : $('slider_value').value/100;
    url += '&scale=' + scale;
  }
  window.location = url;
}
