// SECTION: planner.c/tplanner.c

var MAX_STOPS = 60;
var pp_loads = new Array();

function Load()
{
  this.name = new String();
  this.tractors = new Array();
  this.nas = new Array();
  this.checked = new Object();
  this.cancel = new Object();
}

function pp_init()
{
  var loads=0;
  var tractors=0;
  var last_form=null;
  for (i=0; i<document.sciform.length; i++) {
    e=document.sciform.elements[i];
    if (e.type=='radio') {
      if (last_form!=e.name) {
        if (last_form) {
          loads++;
        }
        // reset
        pp_loads[loads] = new Load();
        pp_loads[loads].name = e.name;
        pp_loads[loads].cancel = document.getElementById('pp'+e.name.substr(3,e.name.length-3)+'clear');
        tractors=0;
        last_form=e.name;
      }
      pp_loads[loads].tractors[tractors] = e;
      pp_loads[loads].nas[tractors] = document.getElementById('pp'+e.name.substr(3,e.name.length-3)+'x'+browserRowIndex(e));
      tractors++;
    }
  }
}

function pp_find(name)
{
  for (i=0; i<pp_loads.length; i++) {
    if (pp_loads[i].name==name) {
      return(pp_loads[i]);
    }
  }
  return(null);
}

function pp_cancel(form)
{
  var tractor='';
  var name='';
  if (form.length) {
    for (i=0; i<form.length; i++) {
      form[i].checked=false;
    }
    name=form[0].name;
  } else {
    form.checked=false;
    name=form.name;
  }
  obj = pp_find(name);
  if (obj) {
    tractor=obj.checked.value;
    obj.checked = null;
    obj.cancel.style.visibility = 'hidden';
  }
  // disable nas for these tractors
  if (tractor) {
    for (i=0; i<pp_loads.length; i++) {
      e=pp_loads[i];
      if (e.name != name) {
        for (t=0; t<e.tractors.length; t++) {
          if (e.tractors[t].value==tractor) {
            e.nas[t].style.visibility='hidden';
          }
        }
      }
    }
  }
}

function pp_tractor(form)
{
  var old_tractor = '';
  obj = pp_find(form.name);
  if (obj) {
    if (obj.checked) {
      old_tractor=obj.checked.value;
    }
    obj.checked = form;
    obj.cancel.style.visibility = 'visible';
    for (t=0; t<obj.tractors.length; t++) {
      if (obj.tractors[t]==form) {
        obj.nas[t].style.visibility='hidden';
      }
    }
  }
  // enable nas for this tractor
  for (i=0; i<pp_loads.length; i++) {
    e=pp_loads[i];
    if (e.name != form.name) {
      for (t=0; t<e.tractors.length; t++) {
        if (e.tractors[t].value==form.value) {
          e.nas[t].style.visibility='visible';
          if (e.tractors[t].checked) {
            e.checked.checked=false;
            e.checked=null;
            e.cancel.style.visibility='hidden';
          }
        } else if (e.tractors[t].value==old_tractor) {
          e.nas[t].style.visibility='hidden';
        }
      }
    }
  }
}

// SECTION: fuel.tag
function recalc_fuel()
{
  document.sciform.Dfuel__fuel_ppg.value=parseFloat(document.sciform.Dfuel__fuel_cost.value/document.sciform.Dfuel__fuel_gallons.value);
  document.sciform.Dfuel__fuel_ppg.onchange();
  document.sciform.Dfuel__reefer_ppg.value=parseFloat(document.sciform.Dfuel__reefer_cost.value/document.sciform.Dfuel__reefer_gallons.value);
  document.sciform.Dfuel__reefer_ppg.onchange();
}

// SECTION: fimpedit.tag
function recalc_fimport()
{
  var form = document.sciform;
  if (!form || !form.Dfimport__misc_1_amount) {
    return;
  }
  form.Dfimport__fuel_ppg.value=parseFloat(form.Dfimport__fuel_cost.value/form.Dfimport__fuel_gallons.value);
  form.Dfimport__fuel_ppg.onchange();
  form.Dfimport__reefer_ppg.value=parseFloat(form.Dfimport__reefer_cost.value/form.Dfimport__reefer_gallons.value);
  form.Dfimport__reefer_ppg.onchange();
  form.Dfimport__oil_ppq.value=parseFloat(form.Dfimport__oil_cost.value/form.Dfimport__oil_quarts.value);
  form.Dfimport__oil_ppq.onchange();
  total=real(form.Dfimport__fuel_cost.value);
  total=real(total)+real(form.Dfimport__reefer_cost.value);
  total=real(total)+real(form.Dfimport__oil_cost.value);
  total=real(total)+real(form.Dfimport__tax_amount.value);
  total=real(total)+real(form.Dfimport__cash_advance_amount.value);
  total=real(total)+real(form.Dfimport__misc_1_amount.value);
  total=real(total)+real(form.Dfimport__misc_2_amount.value);
  total=real(total)+real(form.Dfimport__misc_3_amount.value);
  total=real(total)+real(form.Dfimport__wire_fees.value);
  total=real(total)+real(form.Dfimport__other_fees.value);
  total=real(total)+real(form.Dfimport__ticket_amount.value);
  total=real(total)+real(form.Dfimport__cash_advance_fees.value)
  total=real(total)-real(form.Dfimport__discount_amount.value);
  form.Dfimport__total_amount.value=total;
  form.Dfimport__total_amount.onchange();
}

// SECTION: loads.c
function set_status(status)
{
  document.sciform.Dfilters0__starting.value=status;
  if (document.sciform.Dfilters0__ending) {
    // the loads tab doesn't use an ending filter
    document.sciform.Dfilters0__ending.value=status;
  }
  document.sciform.Ftop_record.value=0;
  submit_sciform();
}

// SECTION: load.c

var submitting=false;

function onsubmit_sciform()
{
  window.submitting=true;
  return true;
}

function abort_load(e)
{
  var event = e ? e : window.event;
  if (!window.submitting &&
      !event.keyCode &&
       (
         event.altKey ||
         (
           typeof(event.clientX)!=undefined &&
           (
             event.clientX<0 ||
             event.clientX>browserWindowWidth() ||
             event.clientY<0 ||
             event.clientY>browserWindowHeight()
           )
         )
       )
     ) {
    pop_hidden('/cgi-bin/load?Faction=ABORT_LOAD&Fnumber='+document.sciform.Dloadhdr__number.value);
    return 'WARNING:  If you are attempting to close the browser window, you will lose your load!';
  }
}

function toggle_option(obj,where)
{
  var str = '';
  if (obj.checked) {
    var ch = 'Y';
  } else {
    var ch = 'N';
  }
  for (i=0; i<document.sciform.Dloadhdr__options.value.length; i++) {
    if (i==where) {
      str+=ch;
    } else {
      str+=document.sciform.Dloadhdr__options.value.charAt(i);
    }
  }
  document.sciform.Dloadhdr__options.value=str;
}

function set_option(obj,where)
{
  var str = '';
  for (i=0; i<document.sciform.Dloadhdr__options.value.length; i++) {
    if (i==where) {
      str+='Y';
    } else {
      str+=document.sciform.Dloadhdr__options.value.charAt(i);
    }
  }
  document.sciform.Dloadhdr__options.value=str;
}

function unset_option(obj,where)
{
  var str = '';
  for (i=0; i<document.sciform.Dloadhdr__options.value.length; i++) {
    if (i==where) {
      str+='N';
    } else {
      str+=document.sciform.Dloadhdr__options.value.charAt(i);
    }
  }
  document.sciform.Dloadhdr__options.value=str;
}

// total time at each level
var total = new Array(5);

function get_icon(row,column,ch,last)
{
  if (last<ch) {
    // we're going down
    if (row<last || row>ch) {
      return "log_blank";
    }
    if (row==last) {
      return "log_bl";
    }
    if (row==ch) {
      return "log_tr";
    }
    return "log_vertical";
  }
  if (last>ch) {
    // we're going up
    if (row>last || row<ch) {
      return "log_blank";
    }
    if (row==last) {
      return "log_tl";
    }
    if (row==ch) {
      return "log_br";
    }
    return "log_vertical";
  }
  // same as before
  if (ch==row) {
    return "log_horizontal";
  }
  return "log_blank";
}

function image_tag(row,column,ch,last)
{
  str=get_icon(row,column,ch,last);
  if (column==0) {
    str+="_first";
    width=7;
  }
  else if (column<95) {
    width=7;
  }
  else {
    str+="_last";
    width=10;
  }
  return "<img border=0 width="+width+" height=28 src='/Themes/Printed/"+str+".gif'>";
}

function draw_row(row,last)
{
  var str;
  str="<div style='padding: 0px; margin: 0px; border: 0px; text-align:left;'>";
    for (column=0; column<96; column++) {
      // get this quarter hour
      if (document.sciform.Flogentry.value.charAt(column)=='0') {
        ch=last;
      } else {
        ch=document.sciform.Flogentry.value.charAt(column);
      }
      if (ch==row) {
        if (document.sciform.Flogentry.value.charAt(column)=='0') {
          str+=image_tag(row,column,ch,last);
        } else {
          str+="<a href='javascript:void(0);' onclick='log_update(0,"+column+");'>"+image_tag(row,column,ch,last)+"</a>";
        }
        total[row]+=.25;
      } else {
        str+="<a href='javascript:void(0);' onclick='log_update("+row+","+column+");'>"+image_tag(row,column,ch,last)+"</a>";
      }
      last=ch;
    }
  str+="</div>";
  return str;
}

function log_entry()
{
  var obj;
  var str = new String();
  total[1]=0.0;
  total[2]=0.0;
  total[3]=0.0;
  total[4]=0.0;
  last=document.sciform.Flogentry.value.charAt(0);
  if (last=='0') {
    last='1';
  }
  str=draw_row(1,last);
  str+=draw_row(2,last);
  str+=draw_row(3,last);
  str+=draw_row(4,last);

  document.getElementById('off_duty').innerHTML=format_number(total[1],2);
  document.getElementById('sleeper').innerHTML=format_number(total[2],2);
  document.getElementById('driving').innerHTML=format_number(total[3],2);
  document.getElementById('on_duty').innerHTML=format_number(total[4],2);
  document.getElementById('total').innerHTML=format_number(total[1]+total[2]+total[3]+total[4],2);
  calc_mph();

  obj = document.getElementById('tablet');
  if (!obj) {
    return;
  }
  obj.innerHTML=str;
}

function log_update(row,column)
{
  var str = new String();
  last='0';
  flag=false;
  for (i=0; i<96; i++) {
    if (i==column) {
      ch=row;
    } else {
      ch=document.sciform.Flogentry.value.charAt(i);
    }
    if (ch==last)
      ch='0';
    if (ch!='0')
      last=ch;
    if (ch!='0' && ch!='1') {
      flag=true;
    }
    str+=ch;
  }
  if (flag) {
    document.sciform.Dlogs__type.value="";
  } else {
    document.sciform.Dlogs__type.value='O';
  }
  document.sciform.Flogentry.value = str;
  log_entry();
}

function calc_mph()
{
  var hours = parseFloat(document.getElementById('driving').innerHTML);
  var on_duty_hours = parseFloat(document.getElementById('on_duty').innerHTML);
  var miles = document.sciform.Dlogs__miles.value;
  var mph = document.getElementById('mph');
  if (hours>0) {
    mph.innerHTML=format_number(miles/hours,2);
  } else {
    mph.innerHTML='No Hours';
  }
  if (parseFloat(miles/hours)>parseFloat(document.sciform.Dlogs__override_mph.value)) {
    mph.style.color='#FF0000';
    document.sciform.Dlogs__violation_checkbox_1.checked = true;
  } else {
    mph.style.color='#000000';
    document.sciform.Dlogs__violation_checkbox_1.checked = false;
  }
  /*
  if (hours>document.sciform.Druleset__max_drive.value) {
    document.sciform.Dlogs__violation_hours_2.value=hours-document.sciform.Druleset__max_drive.value;
    document.sciform.Dlogs__violation_checkbox_2.checked=true;
  } else {
    document.sciform.Dlogs__violation_hours_2.value=0;
    document.sciform.Dlogs__violation_checkbox_2.checked=false;
  }
  if (on_duty_hours+hours>document.sciform.Druleset__max_on_duty.value) {
    document.sciform.Dlogs__violation_hours_3.value=on_duty_hours+hours-document.sciform.Druleset__max_on_duty.value;
    document.sciform.Dlogs__violation_checkbox_3.checked=true;
  } else {
    document.sciform.Dlogs__violation_hours_3.value=0;
    document.sciform.Dlogs__violation_checkbox_3.checked=false;
  }
   */
}

// MAINTENANCE

function pm_next_date(element)
{
  var jd = new JDATE();
  var last = eval('document.sciform.Dprevents'+element+'__last_date');
  var next = document.getElementById('next_date'+element);
  var freq = eval('document.sciform.Dprevents'+element+'__frequency');
  if (freq.value && last.value) {
    datefield = calc_next_date(freq.value,calc_next_date(last.value,systemdate()));
    jd = unjdate(datefield);
    next.innerHTML=String(jd.month).padL(2,"0") + "/" + String(jd.day).padL(2,"0") + "/" + jd.year;
  } else {
    next.innerHTML='';
  }
}

function pm_next_miles(element)
{
  var last = eval('document.sciform.Dprevents'+element+'__last_odometer');
  var next = document.getElementById('next_miles'+element);
  var freq = eval('document.sciform.Dprevents'+element+'__miles');
  if (freq.value>0) {
    next.innerHTML=parseInt(last.value)+parseInt(freq.value);
  } else {
    next.innerHTML='';
  }
}

// RATING

function hide_radius(obj)
{
  radius = eval("document.sciform."+obj.name.replace("point","radius"));
  if (radius) {
    radius.value='';
    radius.style.visibility='hidden';
  }
}

function show_radius(obj)
{
  radius = eval("document.sciform."+obj.name.replace("point","radius"));
  if (radius) {
    radius.style.visibility='visible';
  }
}

function point_input(obj,init)
{
  removeboth(obj);
  if (obj.value.length && inset(obj.value.charAt(0),"0123456789")) {
    // it's a zip, nothing to do
    hide_radius(obj);
    return;
  }
  if (obj.value.length==2) {
    // it's a state, capitalize it
    obj.value = obj.value.toUpperCase();
    hide_radius(obj);
    return;
  }
  // it's a city, verify it
  show_radius(obj);
  if (!init) {
    pop_hidden('/cgi-bin/getcity?Fcity_name='+obj.value+'&Freturn_name='+obj.name);
  }
}

function init_points()
{
  if (document.sciform.Drates0__origin_point) {
    counter=0;
    while (1) {
      point = eval("document.sciform.Drates"+counter+"__origin_point");
      if (!point) {
        // we're done
        return;
      }
      point_input(point,true);
      point = eval("document.sciform.Drates"+counter+"__destin_point");
      point_input(point,true);
      counter++;
    }
  } else if (document.sciform.Drate__origin_point) {
    point_input(document.sciform.Drate__origin_point,true);
    point_input(document.sciform.Drate__destin_point,true);
  }
}

// SECTION load publishing
function publish(obj,counter)
{
  if (obj && document.sciform && document.sciform.Fpublishers) {
    if (obj.checked) {
      // they checked it, add this value to Fpublishers
      str = document.sciform.Fpublishers.value + all_publishers.charAt(counter);
      document.sciform.Bpublish.disabled = false;
    } else {
      // they unchecked it, remove this value from Fpublishers
      str = document.sciform.Fpublishers.value.replace(all_publishers.charAt(counter),'');
      if (str.length<1) {
        document.sciform.Bpublish.disabled = true;
      }
    }
    document.sciform.Fpublishers.value=str;
  }
}

function get_rate()
{
  var cmd = '/cgi-bin/tlrate?tt=' + rate_type;
  if (rate_from_city && rate_from_city.length)
    cmd += '&from_city=' + rate_from_city;
  if (rate_from_zip && rate_from_zip.length)
    cmd += '&from_zip=' + rate_from_zip;
  if (rate_to_city && rate_to_city.length)
    cmd += '&to_city=' + rate_to_city;
  if (rate_to_zip && rate_to_zip.length)
    cmd += '&to_zip=' + rate_to_zip;
  if (rate_miles && rate_miles.length)
    cmd += '&miles=' + rate_miles;
  call(cmd,null,eval);
}

function get_rate_load(inline)
{
  var first_city="";
  var first_zip="";
  var last_city="";
  var last_zip="";
  for (var stop=0; stop<MAX_STOPS; stop++) {
    var type=eval('document.sciform.Dstops'+stop+'__type');
    var city=eval('document.sciform.Dstops'+stop+'__city_code');
    var zip=eval('document.sciform.Dstops'+stop+'__zip');
    if (type) {
      var this_type=selected(type);
      if (this_type=='L') {
        if (!first_city.length && !first_zip.length) {
          first_city=city.value;
          first_zip=zip.value;
        }
      }
      if (this_type=='U') {
        last_city=city.value;
        last_zip=zip.value;
      }
    }
  }
  var trailer_type = selected(document.sciform.Dloadhdr__trailer_type);
  var cmd = '/cgi-bin/tlrate';
  if (inline) {
    cmd += '?tool=I&tt=' + trailer_type;
  } else {
    cmd += '?readable&tt=' + trailer_type;
  }
  if (first_city && first_city.length)
    cmd += '&from_city=' + first_city;
  if (first_zip && first_zip.length)
    cmd += '&from_zip=' + first_zip;
  if (last_city && last_city.length)
    cmd += '&to_city=' + last_city;
  if (last_zip && last_zip.length)
    cmd += '&to_zip=' + last_zip;
  cmd += '&miles=' + document.sciform.Dloadhdr__billable_miles.value;
  if (inline) {
    call(cmd,null,eval);
  } else {
    pop_window(cmd);
  }
}

