document.observe("dom:loaded",function(){
  $('show').hide();
  $('accordion_content2').toggle();
  $('accordion_content3').toggle();

  $('servers').observe('keyup', validateInput);
  $('workstations').observe('keyup', validateInput);
  $('firewalls').observe('keyup', validateInput);
  $('inhouse_staff').observe('keyup', validateInHouseDecimalInput);
  $('inhouse_salary').observe('keyup', validateInHouseDecimalInput);
  $('outsource_rate').observe('keyup', validateOutSourceDecimalInput);
  $('outsource_hours').observe('keyup', validateOutSourceDecimalInput);



    function validateInHouseDecimalInput(event) {	
    var nums = this.value.sub(/[a-zA-Z]/,"");
    nums = nums.sub(/[\=\+\!\@\#\$\%\^\&\*\(\)\-\_\\\|\]\[\{\}\'\"\;\:\/\?\,\<\>]/,"");
    nums = nums.sub(/\.{2}/,".");
    this.value = nums.sub(/(\.\d+)\./, "#{1}");
    
    //**Calculate InHouse IT Cost
    // Variable for cost calc
    var cost = 1.00;
    //Store fields in a hash for processing
    var inhouse = $H({ numOfStaff: $F('inhouse_staff'), averageSalary: $F('inhouse_salary')});
    inhouse.each(function(pair){
      if(pair.value > 0)
        cost *= parseFloat(pair.value);
     })
     
     if(cost == 1.00){
	   cost = 0.00;
     $('inhouse_total').update(cost.toFixed(2));	
     }
     else
       $('inhouse_total').update(cost.toFixed(2));

    }

    function validateOutSourceDecimalInput(event) {	
    var nums = this.value.sub(/[a-zA-Z]/,"");
    nums = nums.sub(/[\=\+\!\@\#\$\%\^\&\*\(\)\-\_\\\|\]\[\{\}\'\"\;\:\/\?\,\<\>]/,"");
    nums = nums.sub(/\.{2}/,".");
    this.value = nums.sub(/(\.\d+)\./, "#{1}");

    //**Calculate outsource IT Cost
    // Variable for cost calc
    var cost = 1.00;
    //Store fields in a hash for processing
    var outsource = $H({ rate: $F('outsource_rate'), hours: $F('outsource_hours')});
    outsource.each(function(pair){
      if(pair.value > 0)
        cost *= parseFloat(pair.value);
     })
     
     if(cost == 1.00){
	   cost = 0.00;
       $('outsource_total').update(cost.toFixed(2));
     }
     else
       $('outsource_total').update(cost.toFixed(2));

    }
      

    function validateInput(event){
	this.value = this.value.sub(/\D/,"");
        sumDevices();
    }

    function sumDevices(){
        //create a variable to hold the device sum
        var sum = 0;
        //create a hash of the device form field values
        var devices = $H({ servers: $F('servers'), workstations: $F('workstations'), firewalls: $F('firewalls') }); 
        //remove any items that are not 1 or greater
        devices.each(function(pair) {   
          if(pair.value > 0)
            sum += parseInt(pair.value);
        }); 

        $('device_total').update(sum);
      
}

    function calculateDeviceCost(){
        var wytechCost = 0;
        var competitorCost = 0;
        var validDevices = new Hash();
        var devices = $H({servers: $F('servers'), workstations: $F('workstations'), firewalls: $F('firewalls') });
        var wytechPrice = $H({servers: '250', workstations: '50', firewalls: '65'}); 
        var competitorPrice = $H({servers: '350', workstations: '60', firewalls: '75'});
        //remove any items that are not 1 or greater
        devices.each(function(pair) { 
	      var deviceValue = devices.get(pair.key);  
          if(deviceValue > 0)
            validDevices.set(pair.key, deviceValue);
        })

        validDevices.each(function(pair){
          var wytechCostPerItem = parseInt(wytechPrice.get(pair.key)); 
          if(wytechCostPerItem){
            var competitorCostPerItem = parseInt(competitorPrice.get(pair.key));
            var numOfItems = validDevices.get(pair.key);
            wytechCost = parseInt(wytechCost) + (parseInt(wytechCostPerItem) * parseInt(numOfItems)); 
            competitorCost += parseInt(competitorCostPerItem) * parseInt(numOfItems);
          }
        })
        var companies = $H({wytechnology: wytechCost, competitor: competitorCost});
        return companies;
      
    }

    function calculateInHouseCost(){
      var inhouseCost = 0;
      var inhouse = $H({ staff: $F('inhouse_staff'), salary: $F('inhouse_salary')});
      var validInhouse = new Hash();
      inhouse.each(function(pair){
	    var inhouseValue = inhouse.get(pair.key);
        if(inhouseValue > 0)
          validInhouse.set(pair.key, inhouseValue);
      })
      var values = validInhouse.values();
      var size = values.size();
      if(size > 1)
        inhouseCost = 1.25 * (parseFloat(validInhouse.get('staff')) * parseFloat(validInhouse.get('salary'))); 

      return inhouseCost;
    }

    function calculateOutSourceCost(){
      var outsourceCost = 0;
      var outsource = $H({ rate: $F('outsource_rate'), hours: $F('outsource_hours')});
      var validOutsource = new Hash();
      outsource.each(function(pair){
	    var outsourceValue = outsource.get(pair.key);
        if(outsourceValue > 0)
          validOutsource.set(pair.key, outsourceValue);
      })
      var values = validOutsource.values();
      var size = values.size();
      if(size > 1)
        outsourceCost = 12.00 * (parseFloat(validOutsource.get('rate')) * parseFloat(validOutsource.get('hours'))); 
      return outsourceCost;
    }
  
  $('submit').observe('click', function(event){
            var savings
            var companiesDeviceCost = $H(calculateDeviceCost());
            //we are dealing with annual costs so convert the number to a yearly rate
            var wytechDeviceCost = 12.00 * parseFloat(companiesDeviceCost.get('wytechnology'));
            var competitorDeviceCost = 12.00 * parseFloat(companiesDeviceCost.get('competitor'));

            var inhouseCost = calculateInHouseCost();
            var outsourceCost = calculateOutSourceCost();

	    // our calculate functions already returned valid values.
            // if both inhouseCost and outsourceCost are zero then compare wytech to competitor
            // else compare wytech to inhouse and outsorce 
            if(inhouseCost > 0 || outsourceCost > 0)
              savings = (parseFloat(inhouseCost) + parseFloat(outsourceCost)) - parseFloat(wytechDeviceCost);
            else
              savings = parseFloat(competitorDeviceCost) - parseFloat(wytechDeviceCost);

         
	    //var formatedSavings = new Number(savings);
	    var elt = $('show');
	    Effect.BlindDown(elt, 'bottom-left');
	    $('total').update("$" + savings.toFixed(2));
	 //   new Effect.Parallel([
	//	      new Effect.Move(elt, { sync: true, x: 250, y: 500, mode: 'absolute' }), 
	//	      new Effect.Opacity(elt, { sync: true, from: 0, to: 1 })
	//	  ], { 
	//	    duration: 1.5
	//	  });
	//	
	    //new Effect.Highlight($('total'), {startcolor: '#ffff99', endcolor: '#ffffff'});    
  })


  $('accordion_toggle1').observe('click', function(event){
	var elt1 = $('accordion_content1');
	var elt2 = $('accordion_content2');
	var elt3 = $('accordion_content3');
	if(elt1.visible())
	  	Effect.toggle(elt1, family='slide'); //close it
	else{
		Effect.toggle(elt1, family='slide'); //open it and close the others if open
		if(elt2.visible())
			Effect.toggle(elt2, family='slide');
		if(elt3.visible())
		    Effect.toggle(elt3, family='slide');
	}
  })
  $('accordion_toggle2').observe('click', function(event){
	var elt1 = $('accordion_content1');
	var elt2 = $('accordion_content2');
	var elt3 = $('accordion_content3');
	if(elt2.visible())
	  	Effect.toggle(elt2, family='slide'); //close it
	else{
		Effect.toggle(elt2, family='slide'); //open it and close the others if open
		if(elt1.visible())
			Effect.toggle(elt1, family='slide');
		if(elt3.visible())
		    Effect.toggle(elt3, family='slide');
	}
  })
  $('accordion_toggle3').observe('click', function(event){
	var elt1 = $('accordion_content1');
	var elt2 = $('accordion_content2');
	var elt3 = $('accordion_content3');
	if(elt3.visible())
	  	Effect.toggle(elt3, family='slide'); //close it
	else{
		Effect.toggle(elt3, family='slide'); //open it and close the others if open
		if(elt2.visible())
			Effect.toggle(elt2, family='slide');
		if(elt1.visible())
		    Effect.toggle(elt1, family='slide');
	}
  })
})
