var PriceCalculator = function(){
  var self = this;
  var form, url, token, timer;
  var vals = {};

  Object.extend(this,{

    init: function(inform) {
      form = $(inform);
      url  = form.action;

      Event.observe(form,'submit',(function(e){
		  if(formtype == 'cover'){
        	self.fetchSpine(true, 'form');
		  } else {
        	self.fetchPrice(true, 'form');
		  }
        Event.stop(e);
        }).bindAsEventListener()
      );
    },

    fetchPrice : function(showResult, caller) {
      var params = Object.extend( form.serialize(true), { action : 'price' , caller : caller.id});
      var req = new Ajax.Request(
        url, {
          parameters: params,
          onSuccess: function(r){ self.updatePrice(r.responseText.evalJSON(),showResult) },
          requestHeaders: { Accept: 'application/json' },
          onException: function(req,e) {
            for (var i in e) {
              // console.log('Ajax-Exception: '+i + ': '+e[i]);
            }
          }

        }
      );
      return false;
    },

    fetchSpine : function() {
      var params = Object.extend( form.serialize(true), {});
      var req = new Ajax.Request(
        url, {
          parameters: params,
          onSuccess: function(r){ self.updateSpine(r.responseText.evalJSON()) },
          requestHeaders: { Accept: 'application/json' },
          onException: function(req,e) {
          }
        }
      );
      return false;
    },

    setOptionlist: function(target,values) {
      target.length = 0;
      values.keys().each(function(k){
        if(values.get(k).id != undefined && values.get(k).name != ''){
          var obj = new Option(values.get(k).name,values.get(k).id,false,false);
          if(values.get(k).disabled == '1'){
            obj.disabled = true;
            obj.className="disabled";
          }
          target.options[target.length] = obj;
        }
      });
    },

    updateInfo : function(data,showResult) {
        // eingetragenen Werte wieder herstellen
        formdata = $H(data.form);
        formdata.each( function(e) {
          $(e.key).value = formdata.get(e.key);
        });

        if (data.error) {
          $('calcError').innerHTML = data.error;
          $('calcError').show();
          $('calcOutput').hide();
          $('calcStartText').hide();
          return;
        }

        if(showResult){
            $('calcError').hide();
            $('calcOutput').show();
            $('calcStartText').hide();
            $('minPages').innerHTML  = data.minPages;

        }
    },

    updatePrice : function(data,showResult) {
      //self.setOptionlist($('e_calculator_binding'),$H(data.bindingVariations));
      //self.setOptionlist($('e_calculator_size'),$H(data.sizeVariations));

        self.updateInfo(data, showResult);

      if(showResult){

        if (data.token != token) {
          return;
        }

          // ToDo: get 300 from Database
        if(data.form.e_calculator_numBooks >= 300){
          $('calcPersonalBit').show();
        }
        else {
          $('calcPersonalBit').hide();
        }
        
        
        // Wenn Rabatt ..
        if (data.discountPercentage!='')
        {
          $('discount').show();
          $('discountPrice').innerHTML  = data.discountPercentage + "%";//data.discountPrice;
        }
        else // Kein Rabatt -- Feld Ausblenden
        {
        	$('discount').hide();
        }

        if(data.infoText != null) {
            alert(data.infoText);
        }
	$('productPrice').setAttribute('value', data.royalty.production);
        $H(data.price).keys().each(function(k){ $(k).innerHTML = data.price[k]; });
      }
      return;
    },

    updateSpine : function(data) {
        self.updateInfo(data, true);
        formdata = $H(data.results);
        formdata.each( function(e) {
          $(e.key).innerHTML = formdata.get(e.key);
        });
        $('cover').className = data.binding;
    }
  });
};

var Calculator = new PriceCalculator();
Event.observe(window,'load',function(){
  Calculator.init('calcForm');
});

