﻿// :: calc.lib.js

// :: Servicefunktion "Listensuche"

function list_search(x,idx_list,val_list){
 for(var id=0;id<idx_list.length && x>idx_list[id];id++){}
 if (x>idx_list[id])
  id++
 return val_list[id];
}

var dl_preis
var auto_preis
var auto_plz
var fahrkosten
var auto_plz1
var zielort
var gewicht
var zustellkosten
var alter
var hubraum
var zoll_preis
var gesamt
var auto_preis_error
var auto_plz_error
var auto_plz1_error
var auto_hubraum_error
var gew_text
var zoll_moskau
var zulassung_moskau
var rate

var form_name="x"
var x=new Array();
var l=new Array();
var p=new Array();

// :: Formeln und Koeffiziente

function anfahrt_formel(x){
 var r=Math.round(x*2*.45);
 return r<100?100:r;
}

function dienstleistung_formel(x){
 return x<5000
  ?440
  :Math.round((x-5000) / 45 + 440);
}

function zoll_formel(alter, hubraum) {
   if (alter == 3) return 0;
   var k = (alter == 1) ? list_search(hubraum, zoll_koeff_idx2, zoll_koeff2) : list_search(hubraum,zoll_koeff_idx, zoll_koeff);
   return Math.round(k * hubraum);
}

// 3 bis 5 Jahre alt
var zoll_koeff_idx = [1000,1500,1800,2300,3000]
var zoll_koeff = [1.5,1.7,2.5,2.7,3,3.6]
// mehr als 5 Jahre alt
var zoll_koeff_idx2 = [1000,1500,1800,2300,3000]
var zoll_koeff2 = [3,3.2, 3.5, 4.8, 5, 5.7] 

var stadt=new Array;
 stadt["_gewicht"]=[1.1,1.4,1.6,1.8];
 stadt["almaty"]=[1220,1290,1380,1480,1550];
 stadt["bischkek"]=[1230,1330,1420,1500,1600];
 stadt["duschanbe"]=[1400,1500,1610,1700,1800];
 stadt["karaganda"]=[1130,1190,1290,1360,1500];
 stadt["tschimkent"]=[1190,1250,1380,1470,1550];
 stadt["pavlodar"]=[1150,1250,1300,1340,1500];
 stadt["kzilorda"]=[1120,1180,1260,1320,1550];
 stadt["kostanai"]=[1100,1200,1250,1290,1500];
 stadt["semipalatinsk"]=[1140,1200,1280,1350,1550];
 stadt["petropavlovsk"]=[1180,1250,1320,1550,1700];
 stadt["kokschetau"]=[1130,1190,1290,1390,1600];
 
// ------------ ------------ ------------ ------------

// :: Calculator Logik

function zoll_calc(){
 var a=alter.value
 var hr=hubraum.value
 if (isNaN(hr)){
  auto_hubraum_error.data="введите индекс цифрами"
  out("zoll",0)
  zoll_preis.value=""
  return
 }
 else{
  auto_hubraum_error.data=" "
  var ret=zoll_formel(a,hr)
  out("zoll",ret)
  zoll_preis.value=ret+" EUR"
 }
}
// :: Calculator Zustellung

function zustellung_calc(){
 var plz=auto_plz1.value;
 var x=zielort.value
 
 if (x<0){
  gewicht.disabled=true
  gew_text.style.color="black";
  out("z_kosten",0)
  zustellkosten.value="";
	return;
 }
 
 if (x.substr(0,1)=="r"){
  x=x.substr(1);
	hubraum.disabled=false;
	zoll_preis.disabled=false;
	alter.disabled=false;
 }
 else if (x.substr(0,1)=="p"){
  x=x.substr(1);
	hubraum.disabled=false;
	zoll_preis.disabled=false;
	alter.disabled=false;
 }
 else{
	hubraum.disabled=true;
	zoll_preis.disabled=true;
	alter.disabled=true;
 }

 if (isNaN(plz)){
  auto_plz1_error.data="введите индекс цифрами"
  zustellkosten.value=" "
  out("z_kosten",0)
  return;
 }
 if (plz.length<2){
  auto_plz1_error.data=" "
  zustellkosten.value=" "
  out("z_kosten",0)
  return;
 }
 
 if (isNaN(x)){
  if (gewicht.disabled){
   gewicht.disabled=false
   gew_text.style.color="red";
  }
  x=list_search(gewicht.value,stadt["_gewicht"],stadt[x])
 }
 else{
  gewicht.disabled=true
  gew_text.style.color="black";
 }
 
 if (Number(plz)==51429&&Number(x)!=610&&Number(x)!=650&&Number(x)!=550){
	auto_plz_error.data=" ";
	var ret=new Number(x);	 
	 }
	 else if (Number(x)==610||Number(x)==550||Number(x)==650) {
	 var lub_plz=new Number(plz.substr(0,2))
	 auto_plz_error.data=" ";
	 var ret=new Number(p[lub_plz])+new Number(x); 
	 }
	 else {
	 var lub_plz=new Number(plz.substr(0,2))
	 auto_plz_error.data=" ";
	 var ret=new Number(l[lub_plz])+new Number(x); 
	 }
out("z_kosten",ret)
zustellkosten.value=ret+" EUR";
	 
}

function fahrkosten_calc(){
 var iv_text=auto_plz.value;
 var iv=new Number(iv_text);
 if(iv_text.length == 5){
  var val=x[iv];
  if (val == undefined){
   auto_plz_error.data="индекс неизвестен";
   fahrkosten.value=''
   out("f_kosten",0)
  }
  else{
   auto_plz_error.data=" ";
   var ret=anfahrt_formel(val)
   out("f_kosten",ret);
   fahrkosten.value=ret+" EUR"
  }
 }
 else{ 
  auto_plz_error.data=" ";
  fahrkosten.value=''
  out("f_kosten",0);
 }
}

function dl_calc(){
 var inp=new Number(auto_preis.value);

 if(isNaN(inp)){
  auto_preis_error.data='введите сумму  цифрами';
  dl_preis.value=""
  out("dl_preis",0)
  return ;
 }
 else{
  auto_preis_error.data=' ';
  var ret=inp?dienstleistung_formel(inp):0
  out("dl_preis",ret);
  dl_preis.value=ret+" EUR"
 }
}

// :: Gesamtsumme

var daten=new Array;

function out(k,v){
 daten[k]=v
 var sum=0
 for (var x in daten)
  sum+=daten[x]
 if (! isNaN(auto_preis.value))
  sum+=Number(auto_preis.value)
 gesamt.value=sum+" EUR"
}