﻿self.urlAjax = "/js/ajax.php";

self.koefitsientAviaWeight = 8;
self.koefitsientAviaRestWeight = 2.5;

self.koefitsientSea1Weight = 4.5;
self.koefitsientSea1RestWeight = 1;

self.koefitsientSea2Weight = 3.5;
self.koefitsientSea2RestWeight = 1;

self.minVolumeWeight = 1;
self.densityOfVolumeWeight = 166;
self.serviceCommission = 0.1;
self.serviceCommissionAbsolute = 10;
self.insurance = 0.025;
self.maxFreeCustom = 250;
self.customTax = 0.1;

self.currency = 0;

//1- small 2 - big
self.cargoType = 1;

function FireCalculation(cost, deliverUSA, weight, sizeA, sizeB, sizeC, typeDeliver)
{
 var volumeWeight = sizeA*sizeB*sizeC*0.000001*self.densityOfVolumeWeight < 1 ? 1 : sizeA*sizeB*sizeC*0.000001*self.densityOfVolumeWeight;
 weight = weight < 1 ? 1 : weight;
 SetTypeOfDeliver((weight > 1 || volumeWeight > 1) ? 2 : 1);
 
 var restWeight = volumeWeight > weight ? volumeWeight - weight : 0;
 delivers = ["Avia", "Sea1", "Sea2"];
 
 return (cost + deliverUSA + self["koefitsient" + delivers[typeDeliver] + "Weight"]*weight + self["koefitsient" + delivers[typeDeliver] + "RestWeight"]*restWeight + (self.serviceCommission*cost + 1.12 + 0.21*weight + (cost*0.005) + self.serviceCommissionAbsolute) + self.insurance*cost + (cost < self.maxFreeCustom ? 0 : self.customTax*cost));
}

function FireChangeValue()
{
 var cost = parseFloat(document.getElementById("cost").value);
 var deliverUSA = parseFloat(document.getElementById("deliverUSA").value);
 var weight = parseFloat(document.getElementById("weight").value);
 var sizeA = parseFloat(document.getElementById("sizeA").value);
 var sizeB = parseFloat(document.getElementById("sizeB").value);
 var sizeC = parseFloat(document.getElementById("sizeC").value);
 var typeDeliver = parseInt(document.getElementById("typeDeliver").value);

 var costUSA = FireCalculation(cost, deliverUSA, weight, sizeA, sizeB, sizeC, typeDeliver);
 document.getElementById("resultUSD").innerHTML = isFinite(costUSA) ? costUSA.toFixed(0) : "-";
 if(self.currency != 0)
  document.getElementById("resultUAH").innerHTML = isFinite(costUSA) ? (costUSA * self.currency).toFixed(0) : "-"
 else GetCurrency();
}

function SetTypeOfDeliver(type)
{
 if(type == self.cargoType)
  return;
 
 self.cargoType = type;

 var selectElem = document.getElementById("typeDeliver");
 switch(self.cargoType)
 {
  case 1:
   selectElem.selectedIndex = 0;
   selectElem.options[2] = null;
   selectElem.options[1] = null;
   FireChangeValue();
   break;

  case 2:
   selectElem.add(new Option("Морская (5-6 недель)", "1"), null);
   selectElem.add(new Option("Морская (6-7 недель)", "2"), null);
   break;
 }
}
 
 function GetCurrency()
 {
  var httpXml = self.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
  httpXml.open("POST", self.urlAjax, true);
  //httpXml.open("POST", "/js/ajax.php", true);
  httpXml[self.ActiveXObject ? "onReadyStateChange" : "onreadystatechange"] = function()
  {
   if(httpXml.readyState == 4)
   {
    if(httpXml.status == 200)
    {
     var nodes = SelectNodes(httpXml.responseXML, "./account_order/row/exchangerate");
	 for(var i = 0; i< nodes.length; i++)
	  if(nodes[i].getAttribute("ccy") == "USD")
	  {
	   self.currency = parseFloat(nodes[i].getAttribute("sale"));
	   FireChangeValue();
	  }
    }
   }
  }
  
  try
  {
   httpXml.send(null);
  }
  catch(e)
  {
   alert("Не удаёться отправить запрос. " + e.message);
  }
 }
 
 function SelectNodes(xmlNode, nodesPath)
 {
  if(window.ActiveXObject)
   return xmlNode.selectNodes(nodesPath.replace(/self\:\:\*/gi, "."));

  var xPathEvaluator = new XPathEvaluator();
  var evaluateResult = xPathEvaluator.evaluate(nodesPath, xmlNode, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

  var nodes = new Array();

  if(evaluateResult != null)
  {
   var resultNode = evaluateResult.iterateNext();
   while(resultNode)
   {
    nodes.push(resultNode);
    resultNode = evaluateResult.iterateNext();
   };
  };

  return nodes;
 }
