/////////////////////////////////////////////////////    
// Прототип cайта компании "Философт"
//
// М. Острогорский (misha@philosoft.ru)
//
// Калькулятор аренды технических писателей
//
/////////////////////////////////////////////////////


// максимальный уровень сложности
var MAXLEVEL = 4;

// расценки
var RATES = load_rates();


// Загружает скорости работы и расценки на перевод
function load_rates()
{
 var rates = new Array();
 
 // расценки. В коде, да. Мне стыдно :( 
 // да еще копи-пейстом все эти калькуляторы
 
 rates.base = new Array();
 
 rates.base[1] = new Array();
 rates.base[1][1] =  13310;
 rates.base[1][2] =  25410;
 rates.base[1][3] =  36300;
 rates.base[1][4] =  45980;
 rates.base[1][5] =  54450;
 
 rates.base[2] = new Array();
 rates.base[2][1] =  18150;
 rates.base[2][2] =  34650;
 rates.base[2][3] =  49500;
 rates.base[2][4] =  62700;
 rates.base[2][5] =  74250;
 
 rates.base[3] = new Array();
 rates.base[3][1] =  22990;
 rates.base[3][2] =  43890;
 rates.base[3][3] =  62700;
 rates.base[3][4] =  79420;
 rates.base[3][5] =  94050;
 
 rates.base[4] = new Array();
 rates.base[4][1] =  27830;
 rates.base[4][2] =  53130;
 rates.base[4][3] =  75900;
 rates.base[4][4] =  96140;
 rates.base[4][5] = 113850;
 
 rates.MAXLEVEL = MAXLEVEL;
 
 return rates;
}


// Возвращает расценки на перевод
function get_rates()
{
 return RATES;
}


// Форматирует число по шаблону ### ### ###
function format_price( price )
{

 if( price )
 {
  var s = "  " + Math.round( price );
 
  var g1 = "";
  var g2 = "";
  var g3 = "";
  var g4 = "";
 
  g1 = s.substr( s.length - 3, 3 );
  if( price > 999 ) g2 = s.substr( s.length - 6, 3 ) + " ";
  if( price > 999999 ) g3 = s.substr( s.length - 9, 3 ) + " ";
  if( price > 999999999 ) g4 = s.substr( s.length - 12, 3 ) + " ";
  
  s = g4 + g3 + g2 + g1;
  }
  else 
   s = "";
 
 return s; 
}


// Проверяет корректность заполнения полей "Количество"
function validate_numofwriters()
{
 var valid = true;
 
 for( level = 1; level <= MAXLEVEL; level++ )
 {
  var n_input = document.getElementById( "numofwriters" + level )  
  var n_str = n_input.value;
  var n = parseInt( n_str );  
  var errmsg = document.getElementById( "errmsg" + level );
  
  if( ( isNaN( n ) && n_str.length > 0 ) || n < 0 )  
  {
   errmsg.style.display = "";
   valid = false;
   errmsg.style.display = "";
  }
  else
   errmsg.style.display = "none";    
 }
 
 return true;
}


// Считывает из формы и возвращает заказ или выбранное предложение
function get_proposal()
{
 var proposal = new Array();
  
 proposal.lines = new Array();
 
 for( level = 1; level <= MAXLEVEL; level++ )
 {  
  // получаем элементы формы
  
  proposal.lines[level] = new Array();
  
  proposal.lines[level].numoftwriters_input = document.getElementById( "numofwriters" + level );
  proposal.lines[level].termz_select        = document.getElementById( "termz" + level );
  proposal.lines[level].daysperweek_select  = document.getElementById( "daysperweek" + level );
  proposal.lines[level].feespan_span        = document.getElementById( "feespan" + level );
  proposal.lines[level].fee_hidden          = document.getElementById( "fee" + level );
  
  // считываем из формы первичные данные
  proposal.lines[level].numoftwriters = parseInt( proposal.lines[level].numoftwriters_input.value );  
  if( !proposal.lines[level].numoftwriters ) proposal.lines[level].numoftwriters = 0;
  
  proposal.lines[level].termz         = parseInt( proposal.lines[level].termz_select.value );    
  if( !proposal.lines[level].termz ) proposal.lines[level].termz = 0;
  
  proposal.lines[level].daysperweek   = parseInt( proposal.lines[level].daysperweek_select.value );  
  if( !proposal.lines[level].daysperweek ) proposal.lines[level].daysperweek = 0;
  
  
  proposal.lines[level].feespan       = parseInt( proposal.lines[level].feespan_span.innerHTML );
  proposal.lines[level].fee           = parseInt( proposal.lines[level].fee_hidden.value );    
 }
   
 proposal.total_feespan_span = document.getElementById( "feespan" ); 
 proposal.total_fee_hidden   = document.getElementById( "fee" );   
 proposal.total_feespan      = proposal.total_feespan_span.innerHTML;
 proposal.total_fee          = parseInt( proposal.total_fee_hidden.value );    
  
 return proposal;
}


// Выводит предложение в форму
function output_proposal( proposal, reset )
{

 if( !reset )
 { 
  // выводим спаны и хиддены по уровням
  for( level = 1; level <= MAXLEVEL; level++ )
  {  
   proposal.lines[level].feespan_span.innerHTML = format_price( proposal.lines[level].fee );
   proposal.lines[level].fee_hidden.value       = proposal.lines[level].fee;        
  }
  
  // выводим спан и хидден итого
  proposal.total_feespan_span.innerHTML = format_price( proposal.total_fee );
  proposal.total_fee_hidden.value       = format_price( proposal.total_fee );  
 }
 else
 {
  for( lavel = 1; i <= MAXLEVEL; i++ )
  {
   proposal.lines[level].feespan_span =  "";
   proposal.lines[level].fee_hidden   = "";      
  }
  
  proposal.total_feespan_span.innerHTML = "";
  proposal.total_fee_hidden.value       = "";  
 }
 
}


// Очищает предложения в форме
function reset_output()
{
 for( level = 1; level <= MAXLEVEL; level++ )
 {
  sp = document.getElementById( "feespan" + level );
  hi = document.getElementById( "fee" + level );
  er = document.getElementById( "errmsg" + level );
  sp.innerHTML = "";
  er.innerHTML = "";
  hi.value = "";
 }
 sp = document.getElementById( "feespan" );
 hi = document.getElementById( "fee" );
 sp.innerHTML = "";
 hi.value = "";
}


// Пакует предложение для отправки в симформу
function pack_current_proposal( prop )
{ 

 
}




// Возвращает предложение для заданного заказа и режима
function rentawcalc( order, rates )
{
 
 order.total_fee = 0;
 
 for( level = 1; level <= MAXLEVEL; level++ )
 { 
  if( order.lines[level].numoftwriters > 0 )
   order.lines[level].fee = rates.base[level][order.lines[level].daysperweek]
                            * order.lines[level].termz
                            * order.lines[level].numoftwriters;
  else    
   order.lines[level].fee = 0;
  
  
  order.total_fee += order.lines[level].fee ? order.lines[level].fee : 0;
    
 }
  
 return order;
}


// Выполняет расчет и выводит результаты
function process_rentawcalc( changesmaker )
{ 
 var order = get_proposal();
 
 // если введен корректный объем 
 if( validate_numofwriters() )
 {
  // рассчитываем заказ для разных режимов
  
  // берем расценки
  var rates = get_rates();  
  
  // предложение
 
  proposal = rentawcalc( order, rates );
  output_proposal( proposal );
           
 }
 else 
  reset_output();  
 
 pack_current_proposal( order );    
 
 return true;
}

