window.addEvent('load', function(){
     var Presupuesto = new Class({
          options: { personas:1, pcs:1 },
          initialize:function(){
               this.eachBox();
               //Añadimos evento Scroll para todos los links "upper"
               $$('[class=upper]').each(function(el){
                    el.addEvent('click', function(){ new Fx.Scroll(window).toTop(); });
               }.bind(this));
               //Añadimos botones de aumentar y disminuir para las PERSONAS
               document.id('pmas').addEvent('click', function(){
                    this.options.personas++; //Añadimos personas
                    this.calc(); //Recalculamos
               }.bind(this));
               document.id('pmenos').addEvent('click', function(){
                    if(this.options.personas>1) this.options.personas--; //Reducidmos personas
                    this.calc(); //Recalculamos
               }.bind(this));
               var myFx = new Fx.Slide('tsoptions'); //Añadimos efecto Slide
               myFx.hide(); //Ocultamos
               document.id('tseguridad').addEvent('click', function(){ myFx.slideIn(); this.calc(); }.bind(this));
               document.id('notseguridad').addEvent('click', function(){ myFx.slideOut(); this.calc();}.bind(this));
               //Añadimos botones que indican nivel de segudidad
               document.id('segbajo').addEvent('click', function(){ this.calc(); }.bind(this));
               document.id('segalto').addEvent('click', function(){ this.calc(); }.bind(this));
               //Añadimos botones de aumentar y disminuir para los PCS
               document.id('pcmas').addEvent('click', function(){
                    this.options.pcs++; //Añadimos personas
                    this.calc(); //Recalculamos
               }.bind(this));
               document.id('pcmenos').addEvent('click', function(){
                    if(this.options.pcs>1) this.options.pcs--; //Reducidmos personas
                    this.calc(); //Recalculamos
               }.bind(this));
          },
          // Devuelve en formato: XX.XXX,YY (dependerá de los números enviados, decimales y el separador de miles
          number_format:function (number, decimals, thousands_sep) {
              var n = !isFinite(+number) ? 0 : +number,
                  prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
                  sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
                  s = '',
                  toFixedFix = function (n, prec) {
                      var k = Math.pow(10, prec);
                      return '' + Math.round(n * k) / k;
                  };
              // Fix for IE parseFloat(0.55).toFixed(0) = 0;
              s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
              if (s[0].length > 3) s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
              if ((s[1] || '').length < prec) {
                  s[1] = s[1] || '';
                  s[1] += new Array(prec - s[1].length + 1).join('0');
              }
              return s;
          },
          calc:function(){
               // Declaramos variables para el uso del cálculo de los precios
               var count = 0, calc=0 , lopd;
               $$('[type=checkbox]').each(function(a){
                    if(a.checked){
                         count++; //Sumamos el resultado
                         if(lopd==null) lopd = parseFloat(a.getProperty('alt')); //bajo, medio o alto
                         else if(parseFloat(a.getProperty('alt')) >= lopd )  lopd = a.getProperty('alt')
                         calc = parseFloat(count)*parseFloat(document.id('fichero').getProperty('value')); //Suma de ficheros Fichero
                         calc += parseFloat(this.options.personas)*parseFloat(document.id('persona').getProperty('value')); //Suma de ficheros Fichero
                         //Comprobamos el soft de seguridad y cantidad
                         if(document.id('tseguridad').checked){
                              if(document.id('segbajo').checked) calc += parseFloat( this.options.pcs)*parseFloat(document.id('tsbajo').getProperty('value')); //Suma de ficheros Fichero
                              else calc += parseFloat( this.options.pcs)*parseFloat(document.id('tsalto').getProperty('value')); //Suma de ficheros Fichero
                         }
                         document.id('lopd-fichero').setProperty('html', count); //Añadimos ficheros en la caja de texto
                         document.id('lopd-personas').setProperty('html', this.options.personas); //Añadimos por defecto 1 persona en la caja de texto
                         document.id('lopd-pcs').setProperty('html', this.options.pcs); //Añadimos por defecto 1 ordenador en la caja de texto
                         document.id('numperson').setProperty('value', this.options.personas); //Añadimos el valor en el campo oculto
                         document.id('numpcs').setProperty('value', this.options.pcs);
                         document.id('numdata').setProperty('value', count); //Añadimos el valor en el campo oculto
                    }
               }.bind(this));
               //Asignamos el nombre, color del borde y precio base según nivel
               if(lopd==1){
                    document.id('lopd-nivel').setProperty('html', 'Bajo');
                    document.id('lopd-presupuesto').setStyles({ 'border-color': '#71B323', 'background-color': '#E9FFCF' });
                    calc += parseFloat(document.id('bajo').getProperty('value')); //Suma de ficheros Fichero
               }else if(lopd==2){
                    document.id('lopd-nivel').setProperty('html', 'Medio');
                    document.id('lopd-presupuesto').setStyles({ 'border-color': '#FFC21F', 'background-color': '#FFF6CF' });
                    calc += parseFloat(document.id('medio').getProperty('value')); //Suma de ficheros Fichero
               }else{
                    document.id('lopd-nivel').setProperty('html', 'Alto');
                    document.id('lopd-presupuesto').setStyles({ 'border-color': '#CF2200', 'background-color': '#FFE4DF' });
                    calc += parseFloat(document.id('alto').getProperty('value')); //Suma de ficheros Fichero
               }
               calc = this.number_format(calc, 2, '.'); //Lamamos el formato
               document.id('lopd-coste').setProperty('html', calc); //Añadimos por defecto 1 persona en la caja de texto
          },
          fadein:function(p, c){
               p.setStyle('border-bottom', c);
               p.tween('background-color', '#FFF6CF');
          },
          fadeout:function(p){
               p.tween('background-color', p.getStyle('border-bottom-color'));
          },
          checked:function(){
               $$('[type=checkbox]').each(function(e){
                    if(e.checked){
                         document.id('lopd-presupuesto').fade('in');
                         document.id('lopd-presupuesto').setStyle('display','block');
                         throw $break; //Salimos del bucle each
                    }else{
                         document.id('lopd-presupuesto').fade('out');
                         document.id('lopd-presupuesto').setStyle('display','none');
                    }
               }.bind(this));
          },
          eachBox:function(){
               $$('[type=checkbox]').each(function(el){
                    el.addEvent('click', function(){
                         this.parent = el.getParent('tr'); //Modificado para que capture el TR (formato con table) y no un div.
                         this.color = this.parent.getStyle('background-color');
                         if(el.checked){
                              this.fadein(this.parent,  this.color); //Efecto
                              this.calc(); //Calcula
                         }else{
                              this.fadeout(this.parent); //Efecto
                              this.calc(); //Calcula
                         }
                         this.checked(); //Comprueba si hay algun checkbox seleccionado
                    }.bind(this));
               }.bind(this));
          }
     });
     var pres = new Presupuesto();
});
