/**
* Пользовательские скрипты калькулятора стоимости перевозки
*
* @author: Mikhail Krasilnikov <mk@dvaslona.ru>
* @version: 0.0.1
* @modified: 2007-04-16
*/
var calcRID = -1;
var calcReq;
var calcRates = new Array;
/**
* Отправка AJAX-запроса
*
* @param string   url     Запрашиваемый адрес
* @param function handler Обработчик ответов
* @access private
*/
function SendRequest(url, handler) 
{
  // branch for native XMLHttpRequest object
  if (window.XMLHttpRequest) {
    calcReq = new XMLHttpRequest();
  // branch for IE/Windows ActiveX version
  } else if (window.ActiveXObject) {
    calcReq = new ActiveXObject('Microsoft.XMLHTTP');
  }
  calcReq.onreadystatechange = handler;
  calcReq.open('GET', url, true);
  calcReq.send(null);
}        
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
/**
* Подгрузка ставок
*
* @access private
*/
function calcLoader()
{
  if (calcReq.readyState == 4) {
    if (calcReq.status == 200) {
      if (calcReq.responseXML.getElementsByTagName('rid')[0].firstChild.data == calcRID) {
        document.getElementById('calcWait').style.display = 'none';
        var a = calcReq.responseXML.getElementsByTagName('rate');
        calcRates.splice(0, calcRates.length);
        for (i=0; i < a.length; i++) calcRates[i] = parseFloat(a[i].firstChild.data);
        calcChange(false);
      };
    } else {
      alert('К сожалению не удалось получить ответ от сервера. Попробуйте ещё раз.');
      document.getElementById('calcWait').style.display = 'none';
    }
  } 
}
/**
* Анализ изменений входных данных
*
* @access public
*/
function calcChange(reload)
{
  var ok = true;
  var Form = document.getElementById('CalcForm');
  var Msgs = document.getElementById('calcMessages');
  if (Form.from.value != Form.to.value) {
    Msgs.getElementsByTagName('div')[0].style.display = 'none';
    if (reload) {
      calcRID = Math.random();
      var url = 'http://www.comfort-logistic.ru/exec.php?action=calc_request&from='+Form.from.value+'&to='+Form.to.value+'&rid='+calcRID;
      SendRequest(url, calcLoader);
      document.getElementById('calcWait').style.display = iBrowser['Engine'] == 'IE' ? 'block' : 'table-row';
    }
  } else {
    ok = false;
    Msgs.getElementsByTagName('div')[0].style.display = 'block';
  }
  if (Form.length.value != '' && Form.height.value != '' && Form.width.value != '') {
    Msgs.getElementsByTagName('div')[1].style.display = 'none';
    var a = parseFloat(Form.length.value.replace(/,/, '.'));
    var b = parseFloat(Form.height.value.replace(/,/, '.'));
    var c = parseFloat(Form.width.value.replace(/,/, '.'));
    var vol = a * b * c;
    var sum = a + b + c;
    document.getElementById('calcVolume').innerHTML = vol;
  } else {
    ok = false;
    Msgs.getElementsByTagName('div')[1].style.display = 'block';
  }
  if (Form.weight.value != '') {
    Msgs.getElementsByTagName('div')[2].style.display = 'none'; 
    var weight = Form.weight.value;
  } else {
    ok = false;
    Msgs.getElementsByTagName('div')[2].style.display = 'block';
  }
  if (ok) {
    Msgs.style.display = 'none';
    var p = weight / vol;
    if (p < calcMinvol) weight = vol * calcMinvol;
    for(var i=0; i<calcRanges.length; i++) if (weight < calcRanges[i]) break;
    var rate = calcRates[i];
    var cost = weight * rate;
    for(var i=calcBSizes.length-1; i>=0; i--) if (sum > calcBSizes[i]) break;
    if (i > -1 && sum > calcBSizes[i]) cost += cost / 100 * calcBDelta[i];
    if (cost < calcMincost) cost = calcMincost;
    var cost = Math.round(cost * 100) / 100;
    document.getElementById('calcCost').getElementsByTagName('span')[0].innerHTML = cost;
    document.getElementById('CalcContacts').style.display = 'block';
  } else {
    Msgs.style.display = iBrowser['Engine'] == 'IE' ? 'block' : 'table-cell';
    document.getElementById('calcCost').getElementsByTagName('span')[0].innerHTML = 0;
    document.getElementById('CalcContacts').style.display = 'none';
  }
}